home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / WINPROGS / WDASM17B.ZIP / HELLO1.ASM < prev    next >
Assembly Source File  |  1993-04-02  |  21KB  |  1,212 lines

  1.         TITLE    WDASM Example Program
  2.         .286
  3.         .MODEL    SMALL
  4.  
  5.         INCLUDE    HELLO2.INC
  6.  
  7.         EXTRN        DefWindowProc:FAR
  8.         EXTRN        GetMessage:FAR
  9.         EXTRN        TranslateMessage:FAR
  10.         EXTRN        FatalExit:FAR
  11.         EXTRN        DispatchMessage:FAR
  12.         EXTRN        GetVersion:FAR
  13.         EXTRN        GetDosEnvironment:FAR
  14.         EXTRN        LocalAlloc:FAR
  15.         EXTRN        LocalRealloc:FAR
  16.         EXTRN        LocalFree:FAR
  17.         EXTRN        FatalAppExit:FAR
  18.         EXTRN        LocalSize:FAR
  19.         EXTRN        UpdateWindow:FAR
  20.         EXTRN        GlobalRealloc:FAR
  21.         EXTRN        GlobalSize:FAR
  22.         EXTRN        InitApp:FAR
  23.         EXTRN        PostQuitMessage:FAR
  24.         EXTRN        LockSegment:FAR
  25.         EXTRN        UnlockSegment:FAR
  26.         EXTRN        WaitEvent:FAR
  27.         EXTRN        GetClientRect:FAR
  28.         EXTRN        GetModuleFileName:FAR
  29.         EXTRN        BeginPaint:FAR
  30.         EXTRN        EndPaint:FAR
  31.         EXTRN        CreateWindow:FAR
  32.         EXTRN        ShowWindow:FAR
  33.         EXTRN        LoadCursor:FAR
  34.         EXTRN        LoadIcon:FAR
  35.         EXTRN        RegisterClass:FAR
  36.         EXTRN        InitTask:FAR
  37.         EXTRN        GetStockObject:FAR
  38.         EXTRN        DrawText:FAR
  39.         EXTRN        Dos3Call:FAR
  40.         EXTRN        __winflags:FAR
  41.  
  42.         .CODE
  43.  
  44. Proc0000Seg1    PROC    NEAR
  45.         ADD    BYTE PTR [BX+SI], AL
  46.         ADD    BYTE PTR [BX+SI], AL
  47.         ADD    BYTE PTR [BX+SI], AL
  48.         ADD    BYTE PTR [BX+SI], AL
  49.         ADD    BYTE PTR [BX+SI], AL
  50.         ADD    BYTE PTR [BX+SI], AL
  51.         ADD    BYTE PTR [BX+SI], AL
  52.         ADD    BYTE PTR [BX+SI], AL
  53. Proc0000Seg1    ENDP
  54.  
  55. Proc0010Seg1    PROC    NEAR
  56.         PUSH    BP
  57.         MOV    BP, SP
  58.         MOV    AX, 002EH
  59.         CALL    NEAR PTR Proc042ASeg1
  60.         CMP    WORD PTR [BP+10], 0
  61.         JZ     L0022H
  62.         JMP    NEAR PTR L008AH
  63. L0022H:        MOV    WORD PTR [BP-46], 0003H
  64.         MOV    WORD PTR [BP-44], LROFFSET WNDPROC
  65.         MOV    WORD PTR [BP-42], SEG WNDPROC
  66.         MOV    WORD PTR [BP-40], 0000H
  67.         MOV    WORD PTR [BP-38], 0000H
  68.         MOV    AX, WORD PTR [BP+12]
  69.         MOV    WORD PTR [BP-36], AX
  70.         PUSH    0
  71.         PUSH    0
  72.         PUSH    7F00H
  73.         CALL    FAR PTR LoadIcon
  74.         MOV    WORD PTR [BP-34], AX
  75.         PUSH    0
  76.         PUSH    0
  77.         PUSH    7F00H
  78.         CALL    FAR PTR LoadCursor
  79.         MOV    WORD PTR [BP-32], AX
  80.         PUSH    0
  81.         CALL    FAR PTR GetStockObject
  82.         MOV    WORD PTR [BP-30], AX
  83.         MOV    WORD PTR [BP-28], 0000H
  84.         MOV    WORD PTR [BP-26], 0000H
  85.         MOV    AX, 0010H
  86.         MOV    DX, DS
  87.         MOV    WORD PTR [BP-24], AX
  88.         MOV    WORD PTR [BP-22], DX
  89.         LEA    AX, WORD PTR [BP-46]
  90.         MOV    DX, SS
  91.         PUSH    DX
  92.         PUSH    AX
  93.         CALL    FAR PTR RegisterClass
  94. L008AH:        MOV    AX, 0010H
  95.         MOV    DX, DS
  96.         PUSH    DX
  97.         PUSH    AX
  98.         MOV    AX, 00C2H
  99.         MOV    DX, DS
  100.         PUSH    DX
  101.         PUSH    AX
  102.         PUSH    00CFH
  103.         PUSH    0
  104.         PUSH    8000H
  105.         PUSH    8000H
  106.         PUSH    8000H
  107.         PUSH    8000H
  108.         PUSH    0
  109.         PUSH    0
  110.         PUSH    WORD PTR [BP+12]
  111.         PUSH    0
  112.         PUSH    0
  113.         CALL    FAR PTR CreateWindow
  114.         MOV    WORD PTR [BP-2], AX
  115.         PUSH    AX
  116.         PUSH    WORD PTR [BP+4]
  117.         CALL    FAR PTR ShowWindow
  118.         PUSH    WORD PTR [BP-2]
  119.         CALL    FAR PTR UpdateWindow
  120. L00CDH:        LEA    AX, WORD PTR [BP-20]
  121.         MOV    DX, SS
  122.         PUSH    DX
  123.         PUSH    AX
  124.         PUSH    0
  125.         PUSH    0
  126.         PUSH    0
  127.         CALL    FAR PTR GetMessage
  128.         AND    AX, AX
  129.         JZ     L00FEH
  130.         LEA    AX, WORD PTR [BP-20]
  131.         MOV    DX, SS
  132.         PUSH    DX
  133.         PUSH    AX
  134.         CALL    FAR PTR TranslateMessage
  135.         LEA    AX, WORD PTR [BP-20]
  136.         MOV    DX, SS
  137.         PUSH    DX
  138.         PUSH    AX
  139.         CALL    FAR PTR DispatchMessage
  140.         JMP    SHORT L00CDH
  141.         NOP
  142. L00FEH:        MOV    AX, WORD PTR [BP-16]
  143.         LEAVE
  144.         RET    000AH
  145. Proc0010Seg1    ENDP
  146.  
  147.  
  148. Proc0105Seg1    PROC    NEAR
  149.         NOP
  150. Proc0105Seg1    ENDP
  151.  
  152. WNDPROC    PROC    FAR PUBLIC
  153.         PUSH    DS
  154.         POP    AX
  155.         NOP
  156.         INC    BP
  157.         PUSH    BP
  158.         MOV    BP, SP
  159.         PUSH    DS
  160.         MOV    DS, AX
  161.         MOV    AX, 002CH
  162.         CALL    NEAR PTR Proc042ASeg1
  163.         PUSH    SI
  164.         PUSH    DI
  165.         MOV    SI, WORD PTR [BP+14]
  166.         MOV    AX, WORD PTR [BP+12]
  167.         JMP    NEAR PTR L017AH
  168.         NOP
  169. L0122H:        PUSH    SI
  170.         LEA    AX, WORD PTR [BP-36]
  171.         MOV    DX, SS
  172.         PUSH    DX
  173.         PUSH    AX
  174.         CALL    FAR PTR BeginPaint
  175.         MOV    DI, AX
  176.         PUSH    SI
  177.         LEA    AX, WORD PTR [BP-44]
  178.         MOV    DX, SS
  179.         PUSH    DX
  180.         PUSH    AX
  181.         CALL    FAR PTR GetClientRect
  182.         PUSH    DI
  183.         MOV    AX, 00DFH
  184.         MOV    DX, DS
  185.         PUSH    DX
  186.         PUSH    AX
  187.         PUSH    -1
  188.         LEA    AX, WORD PTR [BP-44]
  189.         MOV    DX, SS
  190.         PUSH    DX
  191.         PUSH    AX
  192.         PUSH    37
  193.         CALL    FAR PTR DrawText
  194.         PUSH    SI
  195.         LEA    AX, WORD PTR [BP-36]
  196.         MOV    DX, SS
  197.         PUSH    DX
  198.         PUSH    AX
  199.         CALL    FAR PTR EndPaint
  200.         XOR    AX, AX
  201.         XOR    DX, DX
  202.         JMP    SHORT L019FH
  203.         NOP
  204. L016AH:        PUSH    0
  205.         CALL    FAR PTR PostQuitMessage
  206.         XOR    AX, AX
  207.         XOR    DX, DX
  208.         JMP    SHORT L019FH
  209.         NOP
  210.         JMP    SHORT L0187H
  211. L017AH:        CMP    AX, 0002H
  212.         JZ     L016AH
  213.         CMP    AX, 000FH
  214.         JNZ    L0187H
  215.         JMP    NEAR PTR L0122H
  216. L0187H:        PUSH    SI
  217.         PUSH    WORD PTR [BP+12]
  218.         PUSH    WORD PTR [BP+10]
  219.         PUSH    WORD PTR [BP+8]
  220.         PUSH    WORD PTR [BP+6]
  221.         CALL    FAR PTR DefWindowProc
  222.         JMP    SHORT L019FH
  223.         NOP
  224.         MOV    WORD PTR [BP+14], SI
  225. L019FH:        POP    DI
  226.         POP    SI
  227.         SUB    BP, 2
  228.         MOV    SP, BP
  229.         POP    DS
  230.         POP    BP
  231.         DEC    BP
  232.         RETF    000AH
  233. WNDPROC    ENDP
  234.  
  235.  
  236. Proc01ACSeg1    PROC    NEAR
  237. L01ACH        DW    LROFFSET __winflags
  238. L01AEH:        MOV    AL, -1
  239.         PUSH    AX
  240.         CALL    NEAR PTR Proc034ESeg1
  241. L01B4H::    XOR    BP, BP
  242.         PUSH    BP
  243.         CALL    FAR PTR InitTask
  244.         OR    AX, AX
  245.         JZ     L01AEH
  246.         MOV    WORD PTR D0064H, ES
  247.         ADD    CX, 0100H
  248.         JB     L01AEH
  249.         MOV    WORD PTR D002EH, CX
  250.         MOV    WORD PTR D0030H, SI
  251.         MOV    WORD PTR D0032H, DI
  252.         MOV    WORD PTR D0034H, BX
  253.         MOV    WORD PTR D0036H, ES
  254.         MOV    WORD PTR D0038H, DX
  255.         CALL    FAR PTR GetVersion
  256.         MOV    WORD PTR D0066H, AX
  257.         MOV    AH, 48
  258.         TEST    WORD PTR CS:L01ACH, 0001H
  259.         JZ     L01FCH
  260.         CALL    FAR PTR Dos3Call
  261.         JMP    SHORT L01FEH
  262. L01FCH:        INT    0021H
  263. L01FEH:        MOV    WORD PTR D0068H, AX
  264.         TEST    WORD PTR CS:L01ACH, 0001H
  265.         JNZ    L020FH
  266.         MOV    AL, 0
  267.         MOV    BYTE PTR D006BH, AL
  268. L020FH:        XOR    AX, AX
  269.         PUSH    AX
  270.         CALL    FAR PTR WaitEvent
  271.         PUSH    WORD PTR D0032H
  272.         CALL    FAR PTR InitApp
  273.         OR    AX, AX
  274.         JZ     L01AEH
  275.         CALL    NEAR PTR Proc0268Seg1
  276.         CALL    NEAR PTR Proc047ESeg1
  277.         CALL    NEAR PTR Proc05FCSeg1
  278.         CALL    NEAR PTR Proc085CSeg1
  279.         PUSH    WORD PTR D00A0H
  280.         PUSH    WORD PTR D009EH
  281.         PUSH    WORD PTR D009CH
  282.         CALL    NEAR PTR Proc024CSeg1
  283.         ADD    SP, 6
  284.         PUSH    AX
  285.         CALL    NEAR PTR Proc0347Seg1
  286.         MOV    AX, 0015H
  287.         JMP    NEAR PTR L0683H
  288. Proc01ACSeg1    ENDP
  289.  
  290. Proc024CSeg1    PROC    NEAR
  291.         PUSH    BP
  292.         MOV    BP, SP
  293.         PUSH    WORD PTR D0032H
  294.         PUSH    WORD PTR D0030H
  295.         PUSH    WORD PTR D0036H
  296.         PUSH    WORD PTR D0034H
  297.         PUSH    WORD PTR D0038H
  298.         CALL    NEAR PTR Proc0010Seg1
  299.         POP    BP
  300.         RET
  301. Proc024CSeg1    ENDP
  302.  
  303.  
  304. Proc0268Seg1    PROC    NEAR
  305.         MOV    AX, 3500H
  306.         TEST    WORD PTR CS:L01ACH, 0001H
  307.         JZ     L027BH
  308.         CALL    FAR PTR Dos3Call
  309.         JMP    SHORT L027DH
  310. L027BH:        INT    0021H
  311. L027DH:        MOV    WORD PTR D0050H, BX
  312.         MOV    WORD PTR D0052H, ES
  313.         PUSH    CS
  314.         POP    DS
  315.         MOV    AX, 2500H
  316.         MOV    DX, 067EH
  317.         TEST    WORD PTR CS:L01ACH, 0001H
  318.         JZ     L029DH
  319.         CALL    FAR PTR Dos3Call
  320.         JMP    SHORT L029FH
  321. L029DH:        INT    0021H
  322. L029FH:        PUSH    SS
  323.         POP    DS
  324.         MOV    CX, WORD PTR D00B8H
  325.         JCXZ    L02D0H
  326.         MOV    ES, WORD PTR D0064H
  327.         MOV    SI, WORD PTR ES:D002CH
  328.         MOV    AX, WORD PTR D00BAH
  329.         MOV    DX, WORD PTR D00BCH
  330.         XOR    BX, BX
  331.         CALL    DWORD PTR D00B6H
  332.         JAE    L02C2H
  333.         JMP    NEAR PTR L0424H
  334. L02C2H:        MOV    AX, WORD PTR D00BEH
  335.         MOV    DX, WORD PTR D00C0H
  336.         MOV    BX, 0003H
  337.         CALL    DWORD PTR D00B6H
  338. L02D0H:        MOV    ES, WORD PTR D0064H
  339.         MOV    CX, WORD PTR ES:D002CH
  340.         JCXZ    L0319H
  341.         MOV    ES, CX
  342.         XOR    DI, DI
  343. L02DFH:        CMP    BYTE PTR ES:[DI], 0
  344.         JZ     L0319H
  345.         MOV    CX, 000DH
  346.         MOV    SI, 0042H
  347.         REPE    CMPSB
  348.         JZ     L02FAH
  349.         MOV    CX, 7FFFH
  350.         XOR    AX, AX
  351.         REPNE    SCASB
  352.         JNZ    L0319H
  353.         JMP    SHORT L02DFH
  354. L02FAH:        PUSH    ES
  355.         PUSH    DS
  356.         POP    ES
  357.         POP    DS
  358.         MOV    SI, DI
  359.         MOV    DI, 0074H
  360.         MOV    CL, 4
  361. L0305H:        LODSB
  362.         SUB    AL, 65
  363.         JB     L0317H
  364.         SHL    AL, CL
  365.         XCHG    DX, AX
  366.         LODSB
  367.         SUB    AL, 65
  368.         JB     L0317H
  369.         OR    AL, DL
  370.         STOSB
  371.         JMP    SHORT L0305H
  372. L0317H:        PUSH    SS
  373.         POP    DS
  374. L0319H:        MOV    SI, 00C2H
  375.         MOV    DI, 00C2H
  376.         CALL    NEAR PTR Proc03EBSeg1
  377.         MOV    SI, 00C2H
  378.         MOV    DI, 00C2H
  379.         CALL    NEAR PTR Proc03FASeg1
  380.         MOV    SI, 00C2H
  381.         MOV    DI, 00C2H
  382.         CALL    NEAR PTR Proc03EBSeg1
  383.         MOV    SI, 00C2H
  384.         MOV    DI, 00C2H
  385.         CALL    NEAR PTR Proc03EBSeg1
  386.         MOV    SI, 00C2H
  387.         MOV    DI, 00C2H
  388.         CALL    NEAR PTR Proc03FASeg1
  389.         RET
  390. Proc0268Seg1    ENDP
  391.  
  392.  
  393. Proc0347Seg1    PROC    NEAR
  394.         PUSH    BP
  395.         MOV    BP, SP
  396.         XOR    CX, CX
  397.         JMP    SHORT L0368H
  398. Proc0347Seg1    ENDP
  399.  
  400. Proc034ESeg1    PROC    NEAR
  401.         PUSH    BP
  402.         MOV    BP, SP
  403.         MOV    CX, 0001H
  404.         JMP    SHORT L0368H
  405.         PUSH    BP
  406.         MOV    BP, SP
  407.         PUSH    SI
  408.         PUSH    DI
  409.         MOV    CX, 0100H
  410.         JMP    SHORT L0368H
  411.         PUSH    BP
  412.         MOV    BP, SP
  413.         PUSH    SI
  414.         PUSH    DI
  415.         MOV    CX, 0101H
  416. L0368H::    MOV    BYTE PTR D00A9H, CH
  417.         PUSH    CX
  418.         OR    CL, CL
  419.         JNZ    L038DH
  420.         MOV    SI, 024CH
  421.         MOV    DI, 024CH
  422.         CALL    NEAR PTR Proc03EBSeg1
  423.         MOV    SI, 00C2H
  424.         MOV    DI, 00C2H
  425.         CALL    NEAR PTR Proc03EBSeg1
  426.         MOV    SI, WORD PTR [BP+4]
  427.         PUSH    SI
  428.         CALL    NEAR PTR Proc085CSeg1
  429.         ADD    SP, 2
  430. L038DH:        MOV    SI, 00C2H
  431.         MOV    DI, 00